МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА"
Інститут ІКНІ
Кафедра ІСМ
ЗВІТ
про виконання лабораторної роботи №7
на тему: «Робота з динамічними масивами»
з предмету «Програмування та алгоритмічні мови»
Мета роботи: навчитися виділяти та використовувати динамічні масиви даних.
Хід роботи
Завдання 1.
Пишу програму для виконання дій над динамічним двовимірним масивом згідно з своїм варіантом
(Варіант 1).
Написати програму, яка впорядковує за спаданням елементи головниї діагоналі квадратної матриці.
Реалізую доступ до елементів масива двома способами: за допомогою індексів та вказівників. Кожний спосіб реалізую окремою функцією. Алгоритм формування початкового масива реалізую двома способами: за допомогою введення даних з клавіатури та випадкової генерації чисел. В окремій фнкції передбачаю виділення пам’яті під динамічний масив функціями malloc, calloc та new.Кожний спосіб реалізую окремою функцією. Також вивожу на екран елементи початкового масива, а також змінений. В підпрограмі не використовую глобальні змінні. Інформація у підпрограмі передається лише за допомогою параметрів. Введення даних, виведення даних і виконання дій над масивами реалізую в окремих функціях. У головній програмі виконую їхній виклик. Введення-виведення даний супроводжуються відповідними повідомленнями.
Код програми першого завдання:
#include<conio.h>
#include<math.h>
#include <clocale>
#include<iostream>
#include <time.h>
#include <iomanip>
using namespace std;
void newMemoryAllocation(int**&a, int rowCount)
{
a = new int*[rowCount];
for (int i = 0; i < rowCount; i++)
a[i] = new int[rowCount];
}
void mallocMemoryAllocation(int**&a, int rowCount)
{
a = (int**)calloc(rowCount,sizeof(int*));
for (int i = 0; i < rowCount; i++)
a[i] = (int*)calloc(rowCount,sizeof(int));
}
void callocMemoryAllocation(int**&a, int rowCount)
{
a = (int**)malloc(rowCount*sizeof(int*));
for (int i = 0; i < rowCount; i++)
a[i] = (int*)malloc(rowCount*sizeof(int));
}
void input(int**&a, int rowCount)
{
for (int i = 0; i < rowCount; i++)
{
for (int j = 0; j < rowCount; j++)
{
std::cout << "a[" << i << "][" << j << "] = ";
std::cin >> a[i][j];
}
}
}
void random(int**&a, int rowCount)
{
for (int i = 0; i < rowCount; i++)
{
for (int j = 0; j < rowCount; j++)
{
a[i][j] = rand() % 200 - 100;
}
}
}
void output(int**a, int rowCount)
{
for (int i = 0; i < rowCount; i++)
{
for (int j = 0; j < rowCount; j++)
std::cout << a[i][j] << "\t";
std::cout << std::endl;
}
}
void sort(int**&a, int rowCount)
{
int s = 0;
for (int i = 0; i < rowCount; i++)
for (int j = 0; j < rowCount-1; j++)
if (a[j][j]<a[j+1][j+1])
{
int temp = a[j+1][j+1];
a[j + 1][j + 1] = a[j][j];
a[j][j] = temp;
}
}
int main() {
setlocale(LC_CTYPE, "ukr");
srand(time(NULL));
char check = 0;
char check1 = 0;
int **a=NULL;
int rowCount;
cout << "Введіть кільість рядків: ";
cin >> rowCount;
int choice = 0;
std::cout << "введiть 1, якщо хочете викликати calloc, 2 якщо malloc, 3 якщо new \n";
std::cin >> check;
if (check == '1')
callocMemoryAllocation(a, rowCount);
else if (check == '2')
mallocMemoryAllocation(a, rowCount);
else
newMemoryAllocation(a, rowCount);
std::cout << "введiть 1, якщо хочете вводити власноруч, якщо нi то будь-який інший символ \n";
std::cin >> check1;
if (check1 == '1')
input(a, rowCount);
else
random(a, rowCount);
output(a, rowCount);
sort(a, rowCount);
cout << "\n\n";
output(a, rowCount);
_getch();
}
Рис 1. Результат виконання першої програми
Блок-схема до першого завдання:
Рис 2. Алгоритм виконання програми
Завдання 2.
Пишу програму для виконання дій над динамічним двовимірним масивом згідно з своїм варіантом
(Варіант 1).
Задано двовимірний масив цілих числез діапазону (-16,…,22). Знайти всі елементи кратні 3 або всі, крім від’ємних.
Реалізую доступ до елементів масива двома способами: за допомогою індексів та вказівників. Кожний...